﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace TARLib
{
    public class ProdottoOrdinato : Prodotto
    {
        public ProdottoOrdinato(int prodottoID, string nome, string nomeBreve, Guid? codiceOrdinazione, Decimal prezzoListino, string note, Decimal prezzoVendita, PuntoDistribuzione puntoDiDistribuzione, string barcode, bool isLimitato, int percentualeVassoio)
            : base(prodottoID, nome, nomeBreve, prezzoListino, puntoDiDistribuzione, barcode, isLimitato, percentualeVassoio)
        {
            CodiceOrdinazione = codiceOrdinazione;
            Note = note;
            PrezzoVendita = prezzoVendita;
        }

        public Guid? CodiceOrdinazione { get; set; }
        public string Note { get; set; }
        public Decimal PrezzoVendita { get; set; }

        public void SalvaByComandaID(int comandaID, SqlTransaction trans)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Transaction = trans;
            cmd.Connection = trans.Connection;
            cmd.CommandText = "[Cucina].[SP_ProdottiComanda_I]";
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@ComandaID", System.Data.SqlDbType.Int) { Value = comandaID });
            cmd.Parameters.Add(new SqlParameter("@ProdottoID", System.Data.SqlDbType.Int) { Value = ProdottoID });
            cmd.Parameters.Add(new SqlParameter("@Nome", System.Data.SqlDbType.NVarChar, 100) { Value = Nome });
            cmd.Parameters.Add(new SqlParameter("@NomeBreve", System.Data.SqlDbType.NVarChar, 20) { Value = NomeBreve });
            cmd.Parameters.Add(new SqlParameter("@PrezzoVendita", System.Data.SqlDbType.Decimal) { Value = PrezzoVendita, Precision = 10, Scale = 2 });

            if (Note == null)
            {
                cmd.Parameters.Add(new SqlParameter("@Note", System.Data.SqlDbType.NVarChar) { Value = DBNull.Value });
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@Note", System.Data.SqlDbType.NVarChar) { Value = Note });
            }

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
            }
        }

        public void SalvaByVassoioID(int vassoioID, SqlTransaction trans)
        {
            SqlCommand cmd = new SqlCommand();
            cmd.Transaction = trans;
            cmd.Connection = trans.Connection;
            cmd.CommandText = "[Cucina].[SP_ProdottiVassoio_I]";
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.Add(new SqlParameter("@VassoioID", System.Data.SqlDbType.Int) { Value = vassoioID });
            cmd.Parameters.Add(new SqlParameter("@ProdottoID", System.Data.SqlDbType.Int) { Value = ProdottoID });
            cmd.Parameters.Add(new SqlParameter("@Nome", System.Data.SqlDbType.NVarChar, 100) { Value = Nome });
            cmd.Parameters.Add(new SqlParameter("@NomeBreve", System.Data.SqlDbType.NVarChar, 20) { Value = NomeBreve });
            cmd.Parameters.Add(new SqlParameter("@PrezzoVendita", System.Data.SqlDbType.Decimal) { Value = PrezzoVendita, Precision = 10, Scale = 2 });

            if (Note == null)
            {
                cmd.Parameters.Add(new SqlParameter("@Note", System.Data.SqlDbType.NVarChar) { Value = DBNull.Value });
            }
            else
            {
                cmd.Parameters.Add(new SqlParameter("@Note", System.Data.SqlDbType.NVarChar) { Value = Note });
            }

            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                cmd.Dispose();
            }
        }
    }
}
